iT邦幫忙

2023 iThome 鐵人賽

DAY 27
0
Cloud Native

docker系列 第 27

Day27 Service

  • 分享至 

  • xImage
  •  

當我們建立服務時,通常會涉及到資訊的輸入和輸出,例如網頁前後端、資料庫等。每當 Pod 啟動時,Kubernetes 會自動分配一個 IP 給它。然而,我們通常不知道每次分配的 IP,那麼該如何存取這個服務呢?

Kubernetes 已經考慮到這一點,提供了一個基本的 Service 供我們連接服務。同樣地,我們需要編寫一個 YAML 檔案來定義我們的服務,這次以 Nginx 為例。

# service.yaml

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    app: nginx-pod  # 這邊的 Label ,key 跟 value 基本上隨便取即可。
spec:
  containers:
    - name: nginx
      image: nginx
      ports:
        - containerPort: 80

---
apiVersion: v1
kind: Service
metadata:
  name: nginx-nodeport-service
spec:
  type: NodePort
  selector:
    app: nginx-pod  # 要跟這邊對應
  ports:
    - name: nginx
      port: 3306
      targetPort: 80
      nodePort: 30000  # 30000 ~ 32767

在這個例子中,我們的 Pod 使用 Nginx 並開啟 Port 80。接著,我們的 Service 使用 Port 3306 連接到 Pod 的 Port 80,並在所有 Node 上開啟 Port 30000,供外部連線。NodePort 意味著 Service 會在所有 Worker Node 上開放相同的 nodePort 供外部連線,否則預設僅提供給 Kubernetes 內部連線。

別忘了對我們的 Pod 使用 Label 進行標記,並且 Service 會使用 Label Selector 去選擇對應 Label 的 Pod 進行連線。

接下來,我們使用以下指令讓我們的服務建立起來:

$ kubectl apply -f service.yaml

一旦服務建立起來,我們可以在任何一台機器上(Master 或 Worker)透過瀏覽器訪問 http://localhost:30000,查看我們建立起來的服務。

如果想查看所有的 Service,可以使用以下指令:

$ kubectl get service
# 或
$ kubectl get svc

上一篇
Day26 Pod
下一篇
Day 28 Volume, PersistentVolume & PersistentVolumeClaim
系列文
docker30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言